package xyz.kongbai121.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import xyz.kongbai121.common.utils.PublicUtils;

/**
 * @author ljq
 * @version 1.0.0
 * @Description redisson配置  单节点
 * @createTime 2021-12-03
 */
@Configuration
public class RedissonConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private String port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.database}")
    private Integer database;

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() {
        if (PublicUtils.isBlank(password)){
            password = null;
        }
        Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://" + host + ":" + port)
                .setPassword(password)
                .setDatabase(database)
//                .setPingConnectionInterval(1000)
//                .setTimeout(6000)
//                .setConnectionPoolSize(20)
//                .setConnectionMinimumIdleSize(3)
        ;
        config.setThreads(5);
        config.setNettyThreads(10);
        return Redisson.create(config);
    }


//    /**
//     * 主从部署方式
//     */
//    private void initRedisSonConfig1() {
//        Config config = new Config();
//        config.useMasterSlaveServers()
//                //设置redis主节点
//                .setMasterAddress("redis://192.168.1.120:6379")
//                //设置redis从节点
//                .addSlaveAddress("redis://192.168.1.130:6379", "redis://192.168.1.140:6379");
//        RedissonClient redisson = Redisson.create(config);
//    }
//
//    /**
//     * 集群部署方式
//     * cluster方式至少6个节点
//     * 3主3从，3主做sharding，3从用来保证主宕机后可以高可用
//     */
//    private void initRedisSonConfig2() {
//        Config config = new Config();
//        config.useClusterServers()
//                .setScanInterval(2000)//集群状态扫描间隔时间，单位是毫秒
//                .addNodeAddress("redis://192.168.1.120:6379")
//                .addNodeAddress("redis://192.168.1.130:6379")
//                .addNodeAddress("redis://192.168.1.140:6379")
//                .addNodeAddress("redis://192.168.1.150:6379")
//                .addNodeAddress("redis://192.168.1.160:6379")
//                .addNodeAddress("redis://192.168.1.170:6379");
//        RedissonClient redissonClient = Redisson.create(config);
//    }
//
//    /**
//     * 哨兵部署方式
//     * sentinel是采用 Paxos拜占庭协议，一般sentinel至少3个节点
//     */
//    private void initRedisSonConfig4() {
//        Config config = new Config();
//        config.useSentinelServers()
//                .setMasterName("my-sentinel-name")
//                .addSentinelAddress("redis://192.168.1.120:6379")
//                .addSentinelAddress("redis://192.168.1.130:6379")
//                .addSentinelAddress("redis://192.168.1.140:6379");
//        RedissonClient redisson = Redisson.create(config);
//    }
//
//    /**
//     * 云托管部署方式
//     * 这种方式主要解决redis提供商为云服务的提供商的redis连接
//     * 比如亚马逊云、微软云
//     */
//    private void initRedisSonConfig5() {
//        Config config = new Config();
//        config.useReplicatedServers()
//                //主节点变化扫描间隔时间
//                .setScanInterval(2000)
//                .addNodeAddress("redis://192.168.1.120:6379")
//                .addNodeAddress("redis://192.168.1.130:6379")
//                .addNodeAddress("redis://192.168.1.140:6379");
//        RedissonClient redisson = Redisson.create(config);
//    }
}
